﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Bussiness;
using Data;
using WebControls.GaleriaImagenes;
using Presentation.Controls;
using System.Configuration;

namespace Presentation.Admin
{
    public partial class ABM_Novedad_Form : System.Web.UI.Page
    {
        private List<Imagen> lisImagenesNovedad = new List<Imagen>();
        private List<Imagen> lisImagenesTemp = new List<Imagen>();
        private List<Imagen> lisImagenesGridView = new List<Imagen>();
        private Guid idNovedad = new Guid();
        private bool esUpdate = false;
        private string savePath;
        private string ruta;
        private string UploadPath = "~/Images/Upload/";

        protected void btnOpenPopUpAgregarImagen_OnClick(object sender, EventArgs e)
        {
            this.AgregarImagenModalPopup.Show();
        }

        protected void btnSavePopUpAgregarImagen_OnClick(object sender, EventArgs e) 
        {
            SaveImage();        
        }

        protected void btnClosePopUpAgregarImagen_OnClick(object sender, EventArgs e)
        {
            resetAgregarImagenForm();
            this.AgregarImagenModalPopup.Hide();
        }

        private void SaveImage()
        {
            savePath = MapPath(UploadPath + Path.GetFileName( fileupload1.FileUpload.FileName));
            ruta = Path.GetFileName(fileupload1.FileUpload.FileName);
            if (ControladoraABMImagen.checkFileNameExist(ruta))
            {
                showlblFileUpload();
                lblFileUpload.Text = "El nombre de archivo ya existe, por favor cambielo.";
                this.AgregarImagenModalPopup.Show();
                return;
            }
            fileupload1.FileUpload.SaveAs(savePath);
            lisImagenesTemp.Add(ControladoraABMImagen.agregarImagen(fileupload1.Alt, ruta, fileupload1.Titulo));
            ((List<Imagen>)Session["lisImagenesGridView"]).AddRange(lisImagenesTemp);
            refreshGvImagenes();
            resetAgregarImagenForm();
            ShowAppropiateFormControls();
            this.AgregarImagenModalPopup.Hide();
        }

        private void showlblFileUpload()
        {
            lblFileUpload.Visible = true;
        }

        private void resetAgregarImagenForm()
        {
            fileupload1.Alt = "";
            fileupload1.Titulo = "";
            hidelblFileUpload();
            lblFileUpload.Text = "";           
        }

        protected void gvImagenes_OnRowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                Image thumbnail = (Image)e.Row.FindControl("thumbnail");
                Guid ImagenID = new Guid(((Label)e.Row.FindControl("ImagenID")).Text);
                thumbnail.ImageUrl = ConfigurationManager.AppSettings["ImagesUploadPath"] + Imagen.getRuta(ImagenID);
            }
        }

        private void hidelblFileUpload()
        {
            lblFileUpload.Visible = false;
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            checkIsUpdate();
            if (!Page.IsPostBack) prepararForm();
            ShowAppropiateFormControls();
        }

        private void checkIsUpdate()
        {
            if (!String.IsNullOrEmpty(Request.QueryString["idNovedad"]))
            {
                idNovedad = new Guid(Request.QueryString["idNovedad"]);
                esUpdate = true;
            }
        }

        private void ShowAppropiateFormControls()
        {
            if (((List<Imagen>)Session["lisImagenesGridView"]).Count >= 1)
            { DisableAgregarImagenControl(); }
            else { EnableAgregarImagenControl(); }
        }

        private void EnableAgregarImagenControl()
        {
            btnOpenPopUpAgregarImagen.Enabled = true;
        }

        private void DisableAgregarImagenControl()
        {
            btnOpenPopUpAgregarImagen.Enabled = false;
        }

        private void prepararForm()
        {
            createSession("lisImagenesGridView");
            loadValues();
            refreshGvImagenes();
        }

        private void createSession(string name)
        {
            //if (Session[name] == null && name.Equals("lisImagenesGridView")) 
            Session.Add(name, new List<Imagen>());
        }

        private void refreshGvImagenes()
        {
            gvImagenes.DataSource = ((List<Imagen>)Session["lisImagenesGridView"]);
            gvImagenes.DataBind();
        }

        private void loadValues()
        {
            setFechaPublicacion();
            if (esUpdate) loadValues(idNovedad);            
            ((List<Imagen>)Session["lisImagenesGridView"]).AddRange(lisImagenesNovedad);
            ((List<Imagen>)Session["lisImagenesGridView"]).AddRange(lisImagenesTemp);
        }

        private void setFechaPublicacion()
        {            
            fechaPublicacion.DdlAnoMes.Items.FindByValue(FechaPublicacion.getFechaFormatted(DateTime.Now)).Selected = true;
        }

        private void loadValues(Guid idNovedad)
        {
            Data.Novedad n = ControladoraABMNovedad.getNovedad(idNovedad);
            calFechaIniPublicacion.Date = n.fechaPublicacionInicio.Value;
            calFechaFinPublicacion.Date = n.fechaPublicacionFin.Value;
            setFechaPublicacion(n.fechaPublicacion.Value);
            txtDescripcion.Text = n.descripcion;
            lisImagenesNovedad.AddRange(n.getImagenes());
        }

        private void setFechaPublicacion(DateTime fecha)
        {
            unSelectFechaPublicacion();
            try
            {
                fechaPublicacion.DdlAnoMes.Items.FindByValue(FechaPublicacion.getFechaFormatted(fecha)).Selected = true;
            }
            catch (Exception ex)
            {
                fechaPublicacion.DdlAnoMes.Items.Add(FechaPublicacion.createItem(fecha));
            }
        }

        private void unSelectFechaPublicacion()
        {
            foreach (ListItem i in fechaPublicacion.DdlAnoMes.Items)
            {
                i.Selected = false;
            }
        }
        
        protected void gvImagenes_OnRowDeleting(object sender, GridViewDeleteEventArgs e)        
        {       
            Guid idImagen = new Guid();
            foreach (DictionaryEntry entry in e.Keys)
            {
                idImagen = new Guid(entry.Value.ToString());
            }
            ((List<Imagen>)Session["lisImagenesGridView"]).Remove(((List<Imagen>)Session["lisImagenesGridView"]).Find(x => x.id == idImagen));
            ShowAppropiateFormControls();
            refreshGvImagenes();
        }
            
        protected void btnSubir_Click(object sender, EventArgs e)
        {
            //crear la mini
            //guardar la mini
            //guardar la full
            //crear imagen y persistir
            //asociar imagen con novedad, si es nuevo no se va a poder asociar
        }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            if (esUpdate)
            {
                ControladoraABMNovedad.updateNovedad(idNovedad,
                                                     txtDescripcion.Text, 
                                                     DateTime.Parse(fechaPublicacion.DdlAnoMes.SelectedValue),
                                                     calFechaIniPublicacion.Date,
                                                     calFechaFinPublicacion.Date,
                                                     (List<Imagen>)Session["lisImagenesGridView"]);
            }
            else
            {
                ControladoraABMNovedad.addNovedad(DateTime.Parse(fechaPublicacion.DdlAnoMes.SelectedValue), 
                                                  calFechaIniPublicacion.Date,
                                                  calFechaFinPublicacion.Date, 
                                                  txtDescripcion.Text, 
                                                  (List<Imagen>)Session["lisImagenesGridView"]);
                Response.Redirect("~/Admin/ABM_Novedad.aspx");
            }
        }
    }
}